在K8s中,有提供一個支援批次處理應用的工具-job,我們可以利用 job 啟動多個應用程序pod去處理一批工作項,並在工作項執行完畢之後關閉相關的pod
以下是一個簡單的Job,目的是計算圓周率後2000位的數字,而這個pod會在計算完畢後自動關閉
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
利用以下指令便可以執行:
kubectl apply -f <YAML檔>
應該就可以看到終端機回應類似job.batch/pi created
的文字,就代表pod創建成功了
接著利用log便可以看到他的輸出 (若下列指令出現錯誤,可能會需要先使用 kubectl get pods
來取得pod名稱,再重新使用log就可看到結果)
kubectl logs pi
如同其他的 config 檔,job 也需要有 apiVersion
、kind
和 metadata
的值
.spec
在 .spec
區塊僅有template
為必要的項目,另外還有一些項目也必須符合
label
,也必須指定 RestartPolicy
RestartPolicy
僅可以是 Never
或 OnFailure
依據 Job 的行為可以把其歸類為三種,並有一些條列項目會因為種類而有 必要指定
或 不能指定
情形:
.spec.completions
為一個正數,當pod的關閉數量到此數值時,job結束.spec.parallelism
可控制 job 並行的數量,預設值1.spec.completions
,但可設定 .spec.parallelism
,這個概念應該挺容易理解的,如果我們像 Parallel Jobs with completion count
一樣設置了completion,那麼一旦pod關閉到一定數量,但work queue還未處理完,就會發生災難,因此我們不可以設置這個值以上就是 job 的YAML內容,寫完之後皆可利用
kubectl apply
的方式來執行他,明天來講講CronJob吧!